// 环境配置文件
const ENV_CONFIG = {
    // 测试环境
    test: {
        baseUrl: 'http://localhost:8091'
    },
    // 生产环境
    prod: {
        baseUrl: '' // 线上地址暂空
    }
};

// 当前环境，默认为测试环境
const CURRENT_ENV = 'test';

// Token存储键名
const TOKEN_STORAGE_KEY = 'ihome_token';

// 获取当前环境的配置
function getConfig() {
    return ENV_CONFIG[CURRENT_ENV];
}

// 获取完整的API地址
function getApiUrl(endpoint) {
    const config = getConfig();
    return `${config.baseUrl}${endpoint}`;
}

// 保存Token到本地存储
function saveToken(token) {
    if (token) {
        localStorage.setItem(TOKEN_STORAGE_KEY, token);
    }
}

// 获取Token
function getToken() {
    return localStorage.getItem(TOKEN_STORAGE_KEY);
}

// 移除Token
function removeToken() {
    localStorage.removeItem(TOKEN_STORAGE_KEY);
}

// 检查是否已登录
function isLoggedIn() {
    return !!getToken();
}

// 不需要认证的API列表
const NO_AUTH_APIS = [
    '/api/auth/login_phone',
    '/api/auth/login_pwd',
    '/api/auth/login_email',
    '/api/auth/register',
    '/api/auth/sendPhoneCode',
    '/api/auth/sendEmailCode'
];

// 判断API是否需要认证
function isAuthRequired(url) {
    return !NO_AUTH_APIS.some(api => url.includes(api));
}

// 全局统一的API请求函数
async function apiRequest(url, options = {}) {
    try {
        // 准备请求头
        const headers = {
            'Content-Type': 'application/json',
            ...options.headers
        };

        // 如果需要认证且存在token，则添加Authorization头
        if (isAuthRequired(url)) {
            const token = getToken();
            if (token) {
                headers['Authorization'] = `Bearer ${token}`;
            } else {
                // 如果没有token但需要认证，则跳转到登录页
                window.location.href = 'index.html';
                return {
                    success: false,
                    data: null,
                    message: '未登录，请先登录'
                };
            }
        }

        const response = await fetch(url, {
            headers,
            ...options
        });

        const result = await response.json();

        // 统一处理响应
        if (result.code === "0000") {
            return {
                success: true,
                data: result.data,
                message: result.info || '操作成功'
            };
        } else {
            return {
                success: false,
                data: null,
                message: result.info || '操作失败',
                code: result.code
            };
        }
    } catch (error) {
        console.error('API请求失败:', error);
        return {
            success: false,
            data: null,
            message: '网络错误，请稍后重试'
        };
    }
}

// 发送JSON数据的API请求
async function apiPostJson(url, data) {
    return await apiRequest(url, {
        method: 'POST',
        body: JSON.stringify(data)
    });
}

// 发送表单数据的API请求
async function apiPostForm(url, data) {
    const formData = new URLSearchParams();
    for (const key in data) {
        formData.append(key, data[key]);
    }

    return await apiRequest(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: formData
    });
}

// 发送GET请求
async function apiGet(url) {
    return await apiRequest(url, {
        method: 'GET'
    });
}

// 发送PUT请求
async function apiPut(url, data) {
    return await apiRequest(url, {
        method: 'PUT',
        body: JSON.stringify(data)
    });
}

// 发送DELETE请求
async function apiDelete(url) {
    return await apiRequest(url, {
        method: 'DELETE'
    });
}